package com.example.yuejian11.activity;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;
import android.util.Log;

import com.alibaba.fastjson.JSON;
import com.example.yuejian11.R;
import com.example.yuejian11.adapter.TrainAdapter;
import com.example.yuejian11.bean.BannerEntity;
import com.example.yuejian11.bean.TrainEntity;
import com.example.yuejian11.common.GlideImageLoader;
import com.example.yuejian11.common.Url;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.Transformer;
import com.yuyh.easyadapter.helper.ViewHelper;
import com.zhouyou.http.EasyHttp;
import com.zhouyou.http.callback.SimpleCallBack;
import com.zhouyou.http.exception.ApiException;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.OnClick;
import info.hoang8f.widget.FButton;

public class TrainActivity extends BaseActivity {


    @BindView(R.id.banner)//绑定  控件
    Banner banner;

    @BindView(R.id.recy)
    RecyclerView recyclerView;

    @BindView(R.id.rumen)
    FButton rumen;

    @OnClick(R.id.rumen)
    void r(){setRumen();}

    @BindView(R.id.jinjie)
    FButton jinjie;

    @BindView(R.id.quanbu)
    FButton quanbu;

    @BindView(R.id.cainiao)
    FButton cainiao;

    RecyclerView.Adapter adapter;


    LinearLayoutManager layoutManager;
    private List<TrainEntity> entityList;
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_train);//给当前的Activity加载一个布局

        super.onCreate(savedInstanceState);//super.onCreate(savedInstanceState)就是调用父类的onCreate构造函数

        context = getBaseContext();
        initView();//初始视图

        setBanner();
        setRumen();

    }

    private void initView() {
        //设置banner样式
        banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE);
        //设置图片加载器
        banner.setImageLoader(new GlideImageLoader());
        //设置banner动画效果
        banner.setBannerAnimation(Transformer.DepthPage);
        //设置自动轮播，默认为true
        banner.isAutoPlay(true);
        //设置轮播时间
        banner.setDelayTime(3000);
        //设置指示器位置（当banner模式中有指示器时）
        banner.setIndicatorGravity(BannerConfig.CENTER);
        //banner设置方法全部调用完毕时最后调用

        entityList = new ArrayList<>();

        adapter = new TrainAdapter(context, entityList, R.layout.train_item);

        layoutManager = new LinearLayoutManager(context);

        //设置布局管理器
        recyclerView.setLayoutManager(layoutManager);
//设置为垂直布局，这也是默认的
        layoutManager.setOrientation(OrientationHelper.VERTICAL);
//设置Adapter
        //先设置适配器，后添加数据
        recyclerView.setAdapter(adapter);
//设置增加或删除条目的动画
        recyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
    }

    private void setBanner() {
        //列表
        //先访问网络，获取json数据，（为什么手动解析，因为我试过使用gsonconvert.create()，不好解析外层没有大括号的json数组，所以我就手动解析）
        EasyHttp.get("yuejian6/public/index.php/json/train/lists")
                .execute(new SimpleCallBack<String>() {
                    @Override
                    public void onSuccess(String data) {

                        Message msg = Message.obtain(); // 实例化消息对象
                        msg.what = 1; // 消息标识
                        msg.obj = data; // 消息内容存放

                        handler_activity.sendMessage(msg);

                    }

                    @Override
                    public void onError(ApiException error) {
                        Log.d(TAG, "onFailed: " + error);
                    }
                });

    }
    //handler是android中为了处理异步线程更新UI的问题而出现的一个工具。
    //在android异步线程是不能够更新UI的，只能在主线程中更新UI。
    //
    //这里的mhandler不会被你自己调用。你所要做的就是向handler中传递消息，然后handler响应你所传递来的消息。
    //handler会有一个消息队列，是根据你出入的消息顺序排列的，handler会依次响应消息队列里面的消息。
    //
    //总之一句话，就是，当你想要在异步线程里面更新UI的时候就使用handler就好了。
    Handler handler_activity = new mHandler();
    @OnClick(R.id.rumen)
    void setRumen() {
        //入门
        EasyHttp.get("yuejian6/public/index.php/json/train/alists")
                .execute(new SimpleCallBack<String>() {
                    @Override
                    public void onSuccess(String data) {

                        Message msg = Message.obtain(); // 实例化消息对象
                        msg.what = 0; // 消息标识
                        msg.obj = data; // 消息内容存放

                        handler_activity.sendMessage(msg);
                    }

                    @Override
                    public void onError(ApiException error) {
                        Log.d(TAG, "onFailed: " + error);
                    }
                });
    }
    @OnClick(R.id.cainiao)
    void setCainiao() {
        //菜鸟
        EasyHttp.get("yuejian6/public/index.php/json/train/blists")
                .execute(new SimpleCallBack<String>() {
                    @Override
                    public void onSuccess(String data) {

                        Message msg = Message.obtain(); // 实例化消息对象
                        msg.what = 0; // 消息标识
                        msg.obj = data; // 消息内容存放

                        handler_activity.sendMessage(msg);
                    }

                    @Override
                    public void onError(ApiException error) {
                        Log.d(TAG, "onFailed: " + error);
                    }
                });
    }
    @OnClick(R.id.jinjie)
    void setJinjie() {
        //进阶
        EasyHttp.get("yuejian6/public/index.php/json/train/clists")
                .execute(new SimpleCallBack<String>() {
                    @Override
                    public void onSuccess(String data) {

                        Message msg = Message.obtain(); // 实例化消息对象
                        msg.what = 0; // 消息标识
                        msg.obj = data; // 消息内容存放

                        handler_activity.sendMessage(msg);
                    }

                    @Override
                    public void onError(ApiException error) {
                        Log.d(TAG, "onFailed: " + error);
                    }
                });
    }
    @OnClick(R.id.quanbu)
    void setQuanbu() {
        //全部
        EasyHttp.get("yuejian6/public/index.php/json/train/lists")
                .execute(new SimpleCallBack<String>() {
                    @Override
                    public void onSuccess(String data) {

                        Message msg = Message.obtain(); // 实例化消息对象
                        msg.what = 0; // 消息标识
                        msg.obj = data; // 消息内容存放

                        handler_activity.sendMessage(msg);
                    }

                    @Override
                    public void onError(ApiException error) {
                        Log.d(TAG, "onFailed: " + error);
                    }
                });
    }


    private static final String TAG = "TrainActivity";
    // 步骤1：自定义Handler子类（继承Handler类） & 复写handleMessage（）方法
    class mHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            switch (msg.what){
                case 0:
                    //清空原来的数据
                    entityList.clear();

                    List<TrainEntity> entities = null;

                    try{
                        entities = JSON.parseArray(msg.obj.toString(),TrainEntity.class);//数据存在msg.obj中再解析json转换为javabean

                    }catch (Exception e){

                    }

                    if (entities==null){
                        return;
                    }

                    //把获取的数据添加到当前的list
                    entityList.addAll(entities);
                    //调用函数更新数据
                    adapter.notifyDataSetChanged();
                    break;
                case 1:

                    List<TrainEntity> entities1 = null;

                    try{
                        entities1 = JSON.parseArray(msg.obj.toString(),TrainEntity.class);//数据存在msg.obj中再解析json转换为javabean
                    }catch (Exception e){

                    }

                    if (entities1==null){
                        return;
                    }

                    List<String> imgs = new ArrayList<>();
                    List<String> titles = new ArrayList<>();


                    for (TrainEntity trainEntity : entities1) {
                        // img/xxxx.jpg
                        //补全文件地址
                        imgs.add(Url.imgUrl + trainEntity.getPic());
                        //添加标题
                        titles.add(trainEntity.getTrain_name());
                    }

                    //设置标题集合（当banner样式有显示title时）
                    banner.setBannerTitles(titles);
                    //设置图片集合
                    banner.setImages(imgs);
                    banner.start();
                    break;
            }

        }
    }



}
